home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 April: Mac OS SDK / Dev.CD Apr 98 SDK1.toast / Development Kits (Disc 1) / AIAT 1.0.1 / Examples / Sources / RamStoreStream / RamStoreStream.cp < prev    next >
Encoding:
Text File  |  1997-09-11  |  2.1 KB  |  93 lines  |  [TEXT/CWIE]

  1. // RamStoreStream.cp
  2. //    Copyright:    © 1994 - 1996 by Apple Computer, Inc., all rights reserved.
  3.  
  4.  
  5. // Implements IAStoreStream using ram
  6. //
  7. // by john hatton
  8. // **** use with "BetterHandleStream.cp" for controllable buffer growth rate
  9.  
  10. // Note that this doesn't ever delete the stream you give it, so you can re-use
  11. // the ram in subsequent instantiations of this class.
  12.  
  13. #include "RamStoreStream.h"
  14. #include <string.h>
  15. #include <LHandleStream.h>// powerplant stream class
  16.  
  17. RamStoreStream::RamStoreStream( LHandleStream* _myStream) {
  18.     myStream = _myStream;
  19.     am_open = false;
  20. }
  21.  
  22. RamStoreStream::~RamStoreStream() {
  23. }
  24.  
  25. void RamStoreStream::Initialize() {
  26. }
  27.  
  28. void RamStoreStream::Open(bool writeable) {
  29.     am_open = true;
  30. }
  31.  
  32. bool RamStoreStream::IsOpen() {
  33.     return am_open;
  34. }
  35.  
  36. void RamStoreStream::Flush() {
  37.     MaybeFlushBuffer();    
  38. }
  39.  
  40. uint32 RamStoreStream::GetEOF() {
  41.     return myStream->GetLength();
  42. }
  43.  
  44. void RamStoreStream::SetEOF(uint32 address) {
  45.     IAAssert(false);
  46. }
  47.  
  48.  
  49. void RamStoreStream::Write(uint32 address, const byte* data, uint32 length)
  50. {
  51.     uint32 old_stream_length = myStream->GetLength();
  52.  
  53.     if (address > old_stream_length)
  54.     {
  55.         myStream->SetMarker(0,streamFrom_End);        
  56.         // here's a cheesy, inefficient way to zero the stream out w/out accessing it's internals
  57.         
  58.         Ptr zeros = NewPtrClear(address - old_stream_length);
  59.         IAThrowIfNot(zeros, StoreFull);
  60.         myStream->WriteData(&zeros,address - old_stream_length);
  61.         DisposePtr(zeros);
  62.         
  63.         IAThrowIfNot( myStream->GetLength() >= address, StoreFull);
  64.     }
  65.     myStream->SetMarker(address,streamFrom_Start);
  66.     IAThrowIfNot(myStream->GetMarker() == address, StoreError);
  67.     Int32 bytes_written = myStream->WriteData(data, length);
  68.     IAThrowIfNot( bytes_written == length, StoreFull);
  69. }
  70.  
  71. uint32 RamStoreStream::Read(uint32 address, byte* data,  uint32 length)
  72. {
  73.     myStream->SetMarker(address,streamFrom_Start);    
  74.     return myStream->ReadData(data, length);    
  75. }
  76.  
  77. bool RamStoreStream::IsWritable( void )
  78. {
  79.     return true;
  80. }
  81.  
  82. IAStoreStream *RamStoreStream::Clone(void)
  83. {
  84.     throw new IAException("RamStoreStream::Clone not implemented");
  85.     return NULL;
  86. }
  87.  
  88.  
  89. //void RamStoreStream::SetFileType(char* name) {}
  90.  
  91.  
  92.  
  93.